스트럿츠2

  1. 스트럿츠2
    1. 1. 스트첫츠2
    2. 2. 스트첫츠2 설치
    3. 3. 스트첫츠2의 동작 및 구조
    4. 4. 스트첫츠2의 샘플예제
    5. 5. 필터 디스패처
    6. 6. 인터셉터
    7. 7. 리절트
    8. 참고문헌

1. 스트첫츠2

1.1 스트럿츠2란?

스트럿츠1과 웹워크2의 결합 버전이다.
MVC패턴을 구현한 내부 아키텍쳐가 완전 달라진다.
스트럿츠1의 서블릿과 요청 프로세서 기반으로 액션 요청을 처리하던 구조 대신 필터와 인터셉터 기반의 웹워크2 아키텍처 적용함으로 매우 유연한 아키텍처를 갖게된다.

1.2 스트럿츠2의 특징

  • 완전히 새로운 프레임워크
  • 직관적으로 개발할수 있도록 디자인
  • 제로 컨피규레이션 지향
  • 신속한 리로딩
  • POJO액션
  • POJO폼
  • 인터셉터
  • 손쉬운 Ajax 구현
  • 유용한 플러그인
  • 다양한 리절트 타입지원
  • 프로파일링

2. 스트첫츠2 설치


 <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  • struts.xml

<package name="default" extends="struts-default" namespace="">
<action name="HelloWorld" class="example.oracleClub.HelloWorld">
    <result>/oracleClub/HelloWorld.jsp</result>
</action>
</package>

3. 스트첫츠2의 동작 및 구조

3.1 스트럿츠2 동작

스트럿츠2는 사용자요청을 받고 원활하게 작동할 수 있도록 환경을 꾸미고, 어떤 액션을 호출할지 결정 후 액션을 실행, 리절트를 실행시킨후 최종 응답데이터를 사용자에게 반환하는 역할을 하는 컨트롤러를 제공한다.

3.2 스트럿츠2의 구조


3.3 디렉토리 구조


struts2/
|-- WEB-INF
|   |-- applicationContext.xml
|   |-- classes
|   |   |-- Copy of struts.xml
|   |   |-- example
|   |   |   `-- oracleClub
|   |   |       `-- HelloWorld.class
|   |   |-- log4j.properties
|   |   |-- org
|   |   |-- struts.properties
|   |   `-- struts.xml
|   |-- decorators.xml
|   |-- dwr.xml
|   |-- lib
|   |   |-- antlr-2.7.2.jar
|   |   |-- commons-beanutils-1.6.jar
|   |   |-- commons-chain-1.1.jar
|   |   |-- commons-collections-2.1.jar
|   |   |-- commons-digester-1.7.jar
|   |   |-- commons-fileupload-1.2.jar
|   |   |-- commons-io-1.3.2.jar
|   |   |-- commons-javaflow-20060411.jar
|   |   |-- commons-logging-1.0.4.jar
|   |   |-- commons-logging-api-1.1.jar
|   |   |-- commons-validator-1.3.0.jar
|   |   |-- dwr.jar
|   |   |-- freemarker-2.3.8.jar
|   |   |-- itext-1.3.1.jar
|   |   |-- jasperreports-1.3.4.jar
|   |   |-- jcommon-1.0.10.jar
|   |   |-- jdt-compiler-3.1.1.jar
|   |   |-- jfreechart-1.0.6.jar
|   |   |-- log4j-1.2.15.jar
|   |   |-- ognl-2.6.11.jar
|   |   |-- oro-2.0.8.jar
|   |   |-- sitegraph.bat
|   |   |-- sitemesh-2.3.jar
|   |   |-- spring.jar
|   |   |-- struts-core-1.3.5.jar
|   |   |-- struts2-codebehind-plugin-2.0.9.jar
|   |   |-- struts2-config-browser-plugin-2.0.9.jar
|   |   |-- struts2-core-2.0.9.jar
|   |   |-- struts2-jasperreports-plugin-2.0.9.jar
|   |   |-- struts2-jfreechart-plugin-2.0.9.jar
|   |   |-- struts2-pell-multipart-plugin-2.0.9.jar
|   |   |-- struts2-plexus-plugin-2.0.9.jar
|   |   |-- struts2-sitegraph-plugin-2.0.9.jar
|   |   |-- struts2-sitemesh-plugin-2.0.9.jar
|   |   |-- struts2-spring-plugin-2.0.9.jar
|   |   |-- struts2-struts1-plugin-2.0.9.jar
|   |   |-- struts2-tiles-plugin-2.0.9.jar
|   |   |-- tiles-api-2.0.4.jar
|   |   |-- tiles-core-2.0.4.jar
|   |   |-- tiles-jsp-2.0.4.jar
|   |   `-- xwork-2.0.4.jar
|   |-- sitemesh-decorator.tld
|   |-- sitemesh-page.tld
|   |-- sitemesh.xml
|   |-- src
|   |   |-- Copy of struts.xml
|   |   |-- example
|   |   |   |-- oracleClub
|   |   |       `-- HelloWorld.java
|   |   |-- log4j.properties
|   |   |-- struts.properties
|   |   `-- struts.xml
|   `-- web.xml

3.4 환경설정파일

파일필수위치(상대경로)목적
web.xml\WEB-INF\모든 필수 프레임워크 컴포넌트를 포함하기 위한 웹 배치 디스크립터
struts.xml아니오\WEB-INF\classes\리절트/뷰 타입, 액션 매핑, 인터셉터 등을 포함한 메인환경설정
struts.properties아니오\WEB-INF\classes\프레임워크 속성
struts-default.xml아니오\WEB-INF\lib\strtus-core.jar스트럿츠2에 의해 제공되는 기본 환경설정
struts-default.vm아니오\WEB-INF\classes\velocity.peoperties에 의해 참조되는 기본 매크로
struts-plugin.xml아니오플러그인 jar 파일의 루트경로struts.xml과 같은 형식으로 되어있는 플러그인을 위한 선택적 환경설정 파일
velocity.properties아니오\WEB-INF\classes\기본 벨로시티 환경설정 파일 오버라이드

4. 스트첫츠2의 샘플예제

4.1 HelloWorld.java


package example.oracleClub;

public class HelloWorld  {

    public static final String MESSAGE = "Hello World~!";

    public String execute() throws Exception {
        setMessage(MESSAGE);
        return "success";
    }

    private String message;

    public void setMessage(String message){
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}


4.2 HelloWorld.jsp


<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h2><s:property value="message" /></h2>
    </body>
</html>

참고. OGNL

OGNL(Object Graph Navigtion Language) 자바 객체의 프로퍼티값을 얻거나 저장하기 위해 자바 빈상의 프로퍼티를 추적하는 표현식이다.
밸류스택은 Xwork와 스트럿츠2의 동적 컨텍스트 기반의 핵심부분이다. 액션이 실행되는 동안 액션을 스택상에 저장하여 밸류스택을 구축한다.
JSP태그와 벨로시티 매크로는 밸류스택으로부터 객체를 읽어오거나 저장한다.
http://www.ognl.org/

4.3 struts.xml


<action name="HelloWorld" class="example.oracleClub.HelloWorld">
    <result name="success">/oracleClub/HelloWorld.jsp</result>
</action>

<action name="HelloWorld" class="example.oracleClub.HelloWorld">
    <result>/oracleClub/HelloWorld.jsp</result>
</action>

4.4 샘플코드설명

5. 필터 디스패처

필터디스패처란?

  • 사용자의 요청을 최초로 처리하는 것, 서블릿 필터
  • 필터 디스패처는 스트럿츠2의 컨트롤러이다.
  • 필터 디스패처는 액션을 실행하기 위한 환경을 구축한다.
  • 사용자에게 보낼 응답을 처리한다.

\WEB-INF\web.xml


<filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

6. 인터셉터

인터셉터?

  • 액션 실행주위로 실행될 수 있는 코드를 캡슐화한다.
  • 액션이 실행되기 전후에 요청이 다른 객체에 의해서 가로채어질 수 있다
  • 이중서브밋 방지
  • 타입변환
  • 입력 파라미터의 값을 액션 클래스의 프로퍼티에 설정
  • 유효성검사
  • 파일 업로드
  • 출력페이지 준비

인터셉터 스택?

  • 인터셉터는 하나의 액션이 실행되기 전과 후에 요청이 여러 인터셉터를 거치도록 설정할수 있다. 이처럼 체인형식으로 형성된 여러 인터셉터의 무리를 인터셉터 스택이라한다.
  • 인터셉터는 정의된 순서대로 적용 된다.
  • 사용자만의 인터셉터 스택을 정의하여 사용할 수 있다.
  • 패키지별 액션별로 적용될 수 있다.

7. 리절트

리절트?

  • 액션을 수행한 후 화면 출력등과 같은 작업을 의미한다.
  • 액션의 수행 후 반환되는 스트링 값에 일치하는 리절트를 수행하도록 해준다.
  • 리절트는 HTML, JSP, XSLT, Tiles, Stream, XML 등이 제공된다.
  • 기본적으로 포워드이며, 리다이렉트의 경우 별도로 명시하여야 한다.

<action name="HelloWorld" class="example.oracleClub.HelloWorld">
    <result name="success">/oracleClub/HelloWorld.jsp</result>
</action>

참고문헌

문서에 대하여